package ru.zombator.taskman.core.domain;

import java.io.Serializable;

/**
 * Интерфейс "задача"
 * 
 * @author nvamelichev
 * 
 */
public interface ITask extends IIdentifiable, Serializable {
	/**
	 * Состояние задачи
	 */
	public enum Status {
		/**
		 * задача создана
		 */
		CREATED,
		/**
		 * задача назначена
		 */
		ASSIGNED,
		/**
		 * задача выполняется
		 */
		IN_PROGRESS,
		/**
		 * задача выполнена
		 */
		COMPLETE,
	}

	/**
	 * @return имя задачи
	 */
	String getName();

	/**
	 * Задает имя задачи
	 * 
	 * @param newName
	 *            - новое имя задачи
	 */
	void setName(String newName);

	/**
	 * @return описание задачи; <code>null</code>, если не указано
	 */
	String getDescription();

	/**
	 * Задает описание задачи
	 * 
	 * @param newDescription
	 *            - описание задачи
	 */
	void setDescription(String newDescription);

	/**
	 * @return состояние задачи
	 */
	Status getStatus();

	/**
	 * задает состояние задачи
	 */
	void setStatus(Status status);

	/**
	 * @return плановая дата начала
	 */
	Datestamp getStartDate();

	/**
	 * Задает плановую дату начала
	 * 
	 * @param dateStart
	 *            - плановая дата начала
	 */
	void setStartDate(Datestamp dateStart);

	/**
	 * @return плановая дата конца
	 */
	Datestamp getEndDate();

	/**
	 * Задает плановую дату конца
	 * 
	 * @param dateend
	 *            - плановая дата конца
	 */
	void setEndDate(Datestamp dateEnd);
}
